package ar.edu.utn.frba.dds.aterrizar;

import java.util.ArrayList;

import com.lanchita.AerolineaLanchita;


public class Usuario {
	private  HomeUsuarios centroDeUsuarios = HomeUsuarios.getInstance();
	private TipoDeUsuario tipoDeUsuario;
	private String nombre;
	private String apellido;
	private String DNI;

	private float TotalPrecioDeCompras = 0;
	private ArrayList<ArrayList<String>> busquedasRealizadas = new ArrayList<ArrayList<String>>();
	
	public Usuario(String unNombre, TipoDeUsuario unTipo, String unApellido,
			String unDNI) {
		this.setApellido(unApellido);
		this.setNombre(unNombre);
		this.setTipoDeUsuario(unTipo);
		this.setDNI(unDNI);
		this.centroDeUsuarios.getUsuariosRegistrados().add(this);
	}

	public float getTotalPrecioDeCompras() {
		return TotalPrecioDeCompras;
	}
	
	public TipoDeUsuario getTipoDeUsuario() {
		return tipoDeUsuario;
	}

	public void setTipoDeUsuario(TipoDeUsuario tipoDeUsuario) {
		this.tipoDeUsuario = tipoDeUsuario;
	}
	
	public int getRecargo() {
		return this.getTipoDeUsuario().getRecargo();
	}
	
	public	ArrayList<Vuelo> buscarVuelo(AerolineaLanchita aerolinea, ArrayList<String> busqueda, ArrayList<Condiciones> condicionesExtra) {
		busquedasRealizadas.add(busqueda);
		String[][] vuelosGenerales = buscarVuelos(aerolinea, busqueda);
		ArrayList<Vuelo> vuelos = OperadorDeAerolineas.getInstance().getVuelosComoArray(vuelosGenerales);
		ArrayList<Vuelo> vuelosBuscados = new ArrayList<Vuelo>();
		for(Vuelo unVuelo: vuelos){
			if(unVuelo.cumpleRequerimientosExtras(condicionesExtra) && unVuelo.esVisiblePara(aerolinea, this)){
				vuelosBuscados.add(unVuelo);//Seleccionar vuelos que cumplan con la clase y ubicacion
			}
		}
		return vuelosBuscados;
	}
	
	public	String[][] buscarVuelos(AerolineaLanchita aerolinea, ArrayList<String> busqueda) {
		return aerolinea.asientosDisponibles(busqueda.get(0), busqueda.get(1),
			busqueda.get(2), busqueda.get(3), busqueda.get(4), busqueda.get(5));	
	}
	 
	public	void comprarVuelo(AerolineaLanchita aerolinea, String codigo) {
		aerolinea.comprar(codigo);
		this.tipoDeUsuario.registrarCompra(this, OperadorDeAerolineas.getInstance().calcularPrecioDeUnVuelo(aerolinea, codigo, this));
	}
	
	public	void reservarVuelo(AerolineaLanchita aerolinea, String codigo) {
		aerolinea.reservar(codigo, this.getDNI());
	}
	
	public void actualizarCompras(float unMonto) {
		TotalPrecioDeCompras += unMonto; 
	}
	
	public boolean getActitudSuperoferta() {
		return this.getTipoDeUsuario().getActitudSupeoferta();
	}

	private String getDNI() {
		
		return this.DNI;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellido() {
		return apellido;
	}

	public void setDNI(String dni) {
		DNI = dni;
	}
	
	public void setApellido(String apellido) {
		this.apellido = apellido;
	}
}
